// 将光标移动到文字尾部
export function cursorToLast (el) {
  if (navigator.userAgent.indexOf('MSIE') > -1) {
    let range = document.selection.createRange()
    el.last = range
    range.moveToElementText(this)
    range.select()
    document.selection.empty(); // 取消选中
  } else {
    let range = document.createRange()
    range.selectNodeContents(el)
    range.collapse(false)
    var sel = window.getSelection()
    sel.removeAllRanges()
    sel.addRange(range)
  }
}

export function addClass (el, code) {
  if (!el.className.match(new RegExp('(\\s|^)' + code + '(\\s|$)', 'g'), '')) {
    el.className += ' ' + code
  }
}
export function removeClass (el, code) {
  return el.className.replace(new RegExp('(\\s|^)' + code + '(\\s|$)', 'g'), '')
}
// 绑定与移除事件监听
export function on (element, type, handler, param) {
  // param 为一个参数数组集合
  let fn = handler
  if (param && param.length) {
    fn = function (e) {
      handler.apply(this, [...param, e]); // 继承监听函数,并传入参数以初始化
    }
  }
  if (element.addEventListener) {
    element.addEventListener(type, fn, false)
  } else if (element.attachEvent) {
    element.attachEvent('on' + type, fn)
  }
}
export function off (element, type, handler) {
  if (element.removeEventListener) {
    element.removeEventListener(type, handler, false)
  } else if (element.detachEvent) {
    element.detachEvent('on' + type, handler)
  }
}
// 根据校验函数找到最近的符合条件的祖先元素 待优化
export function getParents (el, checker) {
  var node = el
  while (node.parentElement) {
    if (checker(node)) {
      return node
    }
    node = node.parentElement
    if (node.tagName === 'BODY') {
      break
    }
  }
  return null
}
// 从el到lastEl(不包含)之间寻找滚动栏元素
export function findScroller (el, lastEl = document.body) {
  var node = el && el.parentElement
  while (node && lastEl.contains(node) && lastEl !== node) {
    // 判断当前元素是否存在为滚动条
    // 目前通过宽度判定滚动条是否存在，若通过scrollHeight，则很会出现很多错误判定，如td中内容高于单元被隐藏的情况
    if (node.clientWidth > node.offsetWidth) {
      // 在元素上缓存滚动栏元素
      // TODO?改为递归逐级设置缓存？
      el._scroller = node
      return node
    }
    // 检查节点缓存
    if (node._scroller && lastEl.contains(node._scroller) && lastEl !== node._scroller && node._scroller.clientWidth > node._scroller.offsetWidth) {
      el._scroller = node._scroller
      return node._scroller
    }
    node = node.parentElement
  }
  return null
}
export default {
  getParents,
cursorToLast}
